# 问原理
- 什么是 Android Binder?
- Android Binder 是如何实现进程间通信的?
- Android 为什么采用 Binder 作为主要的的 IPC 机制?
- Binder 是如何实现仅通过一次拷贝将数据从 A 进程传递给 B 进程的?
- Binder 的优势是什么?
这些都是问 Binder 的基本原理,回答都大同小异。对于应用层开发,99% 止步于此,再问就不礼貌了。
如果是应聘 Framework 岗位,可能还需要熟悉下面的问题。
# 问流程
- 说一下进程从ServiceManager获取服务的流程
- Binder 是如何找到目标服务并唤醒目标进程/线程的
- Android Binder 中的 Proxy 和 Stub 是什么
- 应用该如何获取和添加 Binder 服务?
- AIDL 是什么?如何使用的?
- Android Binder 中有哪些组件?工作的流程是什么?
无论怎么问,只要把之前讲的 Native 和 Java 层示例程序的源码分析掌握,就可以以不变应万变了。
# 问细节
- 了解 mmap 的原理吗?
- 使用 Binder 传输数据的最大限制是多少,被占满后会导致什么问题?
- Intent 传递大数据限制?
- binder_proc 结构体中有两个 binder_ref 红黑树,它们的作用是什么?
- Android APP 进程天生支持Binder通信的原理是什么?
- AIDL 中的 in out inout oneway 这些关键字的作用是什么?
- Intent 传递大数据限制?
- Binder 服务在调用期间抛出了 RuntimeException 异常,服务端会 Crash 么?
- 客户端调用 Binder 接口后抛出的 DeadObjectException 是什么意思?
- Binder 驱动加载过程中有哪些重要的步骤?
- Binder 的死亡通知机制的作用是什么,它是如何实现的?
- bindService 所绑定的"服务概念和 Binder 中的服务 Server 有什么区别?
- writeStrongBinder与readStrongBinder的作用和原理?
- 每个进程最多存在多少个 Binder 线程,这些线程都被占满后会导致什么问题?
- Binder 驱动什么时候释放缓冲区的内存?
- 为什么使用广播传输 2MB的Bitmap会抛异常,而使用AIDL生成的 Binder 接口传输 Bitmap 就不会抛异常呢?
- 应用进程为什么支持 Binder 通信,直接可以使用四大组件呢?
- 四大组件中常见的 2 个 Binder 服务是?
- Binder 都有什么主要的协议?
- Binder 协议中BC_与BR_开头的协议都有什么区别?
- A 是 C 端,B 是 S 端,问 如何保证 A 知道 B 是否存活,,B 如何知道 A 存活, 如果 A 死了,B 该怎么办?B 死了 A 该怎么办?
细节就比较见功底了,需要我们从应用到内核层,对 Binder 有非常全面的了解。
# 问实践
- 工作中有处理过 Binder 相关的问题吗?
Binder 经过了很多年的迭代,Binder 本身已经很少会出问题了,更多的会从使用的角度去回答。